package com.superbytecode.redis.annotation;

import com.superbytecode.redis.constant.CacheDuration;

import java.lang.annotation.*;

/**
 * All rights Reserved, Designed By www.super-bytecode.com
 *
 * @ProjectName: superbytecode-beacon
 * @Package: com.superbytecode.framework.redis.annotation
 * @ClassName: RedisCacheExpire
 * @Description: [缓存过期注解（配合@Cachebale使用）]
 * <p>
 * 1.支持防缓存穿透
 * 2.支持方法嵌套（内部方法如果不指定过期时间，则继承外部方法的过期时间）
 * <br>
 * 如果不使用该注解指定@Cacheable的过期时间，将会采取RedisCacheAutoConfiguration中配置的全局缓存失效时间
 * </p>
 * @Author: [Lance Ting]
 * @Date: 2023/11/17 18:35
 * @Version: V1.0
 * @Copyright: 2023 www.super-bytecode.com Inc. All rights reserved.
 * TODO: 注意,本文件Lance Ting所作,如果转载或使用请标明具体出处!
 **/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisCacheExpire {

    /**
     * 失效时间（秒）,负数或0表示永不过期
     * <br>
     * 传参请使用Time类中的静态常量，使语义性更好
     * <br>
     * 示例：@RedisCacheExpire(30 * SECOND)
     * <br>
     *
     * @see CacheDuration
     */
    int value();

    /**
     * 上下浮动范围（秒）,默认10毫秒
     * <br>
     * 根据浮动范围生成随机秒数加在缓存失效时间上，防止缓存穿透
     */
    double driftRadius() default 0.01;
}